#!/usr/bin/env python3
"""
FastAPI项目目录结构初始化脚本
用于创建seckill_api项目的标准目录结构，并在每个目录中生成__init__.py文件

使用方法:
    python init_fastapi.py
    或者
    ./init_fastapi.py
"""

import os
import sys
from pathlib import Path


def create_directory_structure():
    """创建FastAPI项目的标准目录结构"""
    
    # 定义项目根目录（当前目录）
    project_root = "."
    
    # 定义需要创建的目录结构
    directories = [
        # 主要业务模块
        "hooks",                    # 钩子和中间件
        "routers",                  # API路由
        "schemas",                  # Pydantic数据模型
        "services",                 # 业务逻辑服务
        "services/protos",          # gRPC协议文件
        "settings",                 # 配置设置
        "utils",                    # 工具类
        
        # 其他常用目录
        "models",                   # 数据库模型
        "database",                 # 数据库相关
        "middleware",               # 中间件
        "dependencies",             # 依赖注入
        "core",                     # 核心配置
        "api",                      # API版本管理
        "api/v1",                   # v1版本API
        "tests",                    # 测试文件
        "logs",                     # 日志文件
        "static",                   # 静态文件
        "templates",                # 模板文件
    ]
    
    print(f"🚀 开始在当前目录创建项目目录结构...")
    
    # 使用当前目录作为项目根目录
    root_path = Path(project_root)
    print(f"✅ 使用当前目录作为项目根目录")
    
    # 创建根目录的__init__.py
    create_init_file(root_path)
    
    # 创建子目录和__init__.py文件
    for directory in directories:
        dir_path = root_path / directory
        dir_path.mkdir(parents=True, exist_ok=True)
        create_init_file(dir_path)
        print(f"✅ 创建目录: {directory}/")
    
    # 创建一些基础文件
    create_basic_files(root_path)
    
    print(f"\n🎉 项目目录结构创建完成!")
    print(f"📁 总共创建了 {len(directories)} 个目录")
    print(f"📄 每个目录都包含了 __init__.py 文件")
    
    # 显示目录树
    print(f"\n📋 目录结构预览:")
    show_directory_tree(root_path)


def create_init_file(directory_path: Path):
    """在指定目录中创建__init__.py文件"""
    init_file = directory_path / "__init__.py"
    if not init_file.exists():
        init_file.write_text('"""{}模块"""\n'.format(directory_path.name))

def main():
    """主函数"""
    try:
        create_directory_structure()
    except Exception as e:
        print(f"❌ 创建目录结构时发生错误: {e}")
        sys.exit(1)
    
    print(f"\n💡 提示:")
    print(f"   1. 进入项目目录: cd seckill_api")
    print(f"   4. 启动服务: python main.py")


if __name__ == "__main__":
    main()